﻿#define _CRT_SECURE_NO_WARNINGS 1


////HJ24 合唱队
////描述
////N 位同学站成一排，音乐老师要请最少的同学出列，使得剩下的 K 位同学排成合唱队形。
////设KK位同学从左到右依次编号为 1，2…，K ，​则称这KK名同学排成了合唱队形。
////通俗来说，能找到一个同学，他的两边的同学身高都依次严格降低的队形就是合唱队形。
////例子：
////123 124 125 123 121 是一个合唱队形
////123 123 124 122不是合唱队形，因为前两名同学身高相等，不符合要求
////123 122 121 122不是合唱队形，因为找不到一个同学，他的两侧同学身高递减。
////
////你的任务是，已知所有N位同学的身高，计算最少需要几位同学出列，可以使得剩下的同学排成合唱队形。
////注意：不允许改变队列元素的先后顺序 且 不要求最高同学左右人数必须相等
////输入描述：
////用例两行数据，第一行是同学的总数 N ，第二行是 N 位同学的身高，以空格隔开
////
////输出描述：
////最少需要几位同学出列
////
////示例1
////输入：8
////      186 186 150 200 160 130 197 200
////输出：4
////说明：由于不允许改变队列元素的先后顺序，所以最终剩下的队列应该为186 200 160 130或150 200 160 130
//
//#include <stdio.h>
//#include <stdlib.h>
//int main()
//{
//    int num = 0;
//    while (scanf("%d", &num) != EOF)
//    {
//        int* arr = (int*)calloc(num, sizeof(int));
//        for (int i = 0; i < num; i++)
//            scanf("%d", &arr[i]);
//
//        int* left = (int*)calloc(num, sizeof(int));
//        for (int i = 0; i < num; i++)
//        {
//            for (int j = 0; j < i; j++)
//                if (arr[i] > arr[j])
//                    left[i] = left[i] > left[j] ? left[i] : left[j];
//            left[i] = left[i] + 1;
//        }
//
//        int* right = (int*)calloc(num, sizeof(int));
//        for (int i = num - 1; i >= 0; i--)
//        {
//            for (int j = num - 1; j > i; j--)
//                if (arr[i] > arr[j])
//                    right[i] = right[i] > right[j] ? right[i] : right[j];
//            right[i] = right[i] + 1;
//        }
//
//        int max = 0;
//        for (int i = 0; i < num; i++)
//            max = ((max > (left[i] + right[i] - 1)) ? max : (left[i] + right[i] - 1));
//        printf("%d\n", num - max);
//
//        free(arr);
//        free(left);
//        free(right);
//    }
//
//    return 0;
//}





